package vues.album;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.ListSelectionModel;
import javax.swing.RowFilter;

import java.awt.Cursor;
import java.awt.Font;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JTable;
import java.awt.Toolkit;
import javax.swing.ImageIcon;

public class Recherche extends JFrame implements DocumentListener{
	private static final long serialVersionUID = 1L;
	
	private JPanel contentPane;
	private JLabel lblTitre;
	private JTextField txtTitre;
	private JLabel lblNumero;
	private JTextField txtNumero;
	private JLabel lblResultat;
	private JButton btnRetour;
	private JScrollPane scrollResultat;
	private RowFilter<TableModel, Integer> filter;
	private modeles.Albums albums = new modeles.Albums();
	private TableRowSorter<TableModel> sorter;
	private JTable tableResultat;
	private JTextField txtPrix;
	private JTextField txtAnnee;
	private JLabel lblPrix;
	private JLabel lblAnnee;
	private JLabel lblGenre;
	private JTextField txtGenre;
	private JTextField txtMaison;
	private JLabel lblMaison;
	private JLabel lblArtiste;
	private JTextField txtArtiste;

	/**
	 * Create the frame.
	 */
	public Recherche() {
		setIconImage(Toolkit.getDefaultToolkit().getImage(Recherche.class.getResource("/images/Album.png")));
		setTitle("Recherche");
		setAutoRequestFocus(false);
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		setBounds(100, 100, 454, 341);
		setResizable(false);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		contentPane.add(getLblTitre());
		contentPane.add(getTxtTitre());
		contentPane.add(getLblNumero());
		contentPane.add(getTxtNumero());
		contentPane.add(getLblResultat());
		contentPane.add(getBtnRetour());
		contentPane.add(getTxtPrix());
		contentPane.add(getTxtAnnee());
		contentPane.add(getLblPrix());
		contentPane.add(getLblAnnee());
		contentPane.add(getLblGenre());
		contentPane.add(getTxtGenre());
		contentPane.add(getTxtMaison());
		contentPane.add(getLblMaison());
		contentPane.add(getLblArtiste());
		contentPane.add(getTxtArtiste());
		contentPane.add(getScrollResultat());
		getRootPane().setDefaultButton(btnRetour);
	}
	private JLabel getLblTitre() {
		if (lblTitre == null) {
			lblTitre = new JLabel("Titre :");
			lblTitre.setFont(new Font("Andalus", Font.PLAIN, 18));
			lblTitre.setBounds(28, 28, 52, 26);
		}
		return lblTitre;
	}
	private JTextField getTxtTitre() {
		if (txtTitre == null) {
			txtTitre = new JTextField();
			txtTitre.setFont(new Font("Andalus", Font.PLAIN, 18));
			txtTitre.setColumns(10);
			txtTitre.setBounds(75, 31, 152, 20);
			txtTitre.getDocument().addDocumentListener(this);
		}
		return txtTitre;
	}
	private JLabel getLblNumero() {
		if (lblNumero == null) {
			lblNumero = new JLabel("Num\u00E9ro :");
			lblNumero.setFont(new Font("Andalus", Font.PLAIN, 18));
			lblNumero.setBounds(4, 5, 77, 26);
		}
		return lblNumero;
	}
	private JTextField getTxtNumero() {
		if (txtNumero == null) {
			txtNumero = new JTextField();
			txtNumero.setFont(new Font("Andalus", Font.PLAIN, 18));
			txtNumero.setColumns(10);
			txtNumero.setBounds(75, 8, 152, 20);
			txtNumero.getDocument().addDocumentListener(this);
		}
		return txtNumero;
	}
	private JLabel getLblResultat() {
		if (lblResultat == null) {
			lblResultat = new JLabel("R\u00E9sultat : ");
			lblResultat.setFont(new Font("Andalus", Font.PLAIN, 18));
			lblResultat.setBounds(10, 111, 89, 14);
		}
		return lblResultat;
	}
	private JButton getBtnRetour() {
		if (btnRetour == null) {
			btnRetour = new JButton("Retour");
			btnRetour.setIcon(new ImageIcon(Recherche.class.getResource("/images/Boutons/Retour.png")));
			btnRetour.setFont(new Font("Andalus", Font.PLAIN, 12));
			btnRetour.setBounds(336, 269, 102, 23);
			btnRetour.setCursor(new Cursor(Cursor.HAND_CURSOR));
			btnRetour.addActionListener(new ActionListener(){
				@Override
				public void actionPerformed(ActionEvent e) {
					dispose();
				}
			});
		}
		return btnRetour;
	}
	private JTable getTableResultat() {
		if (tableResultat == null) {
			albums.update();
			tableResultat = new JTable(albums);
			tableResultat.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
			sorter = new TableRowSorter<TableModel>(albums);
			filter = new RowFilter<TableModel, Integer>() {
				@Override
				public boolean include(Entry<? extends TableModel, ? extends Integer> entry) {
					String numero = ((String)("" + entry.getValue(0))).toUpperCase();
					String titre = ((String)entry.getValue(1)).toUpperCase();
					String prix = ((String)("" + entry.getValue(2))).toUpperCase();
					String genre = ((String)entry.getValue(3)).toUpperCase();
					String annee = ((String)("" + entry.getValue(4))).toUpperCase();
					String maison = ((String)entry.getValue(5)).toUpperCase();
					String artiste = ((modeles.Artiste)entry.getValue(6)).toString().toUpperCase();
					String numeroR = null;
					String titreR = null;
					String prixR = null;
					String genreR = null;
					String anneeR = null;
					String maisonR = null;
					String artisteR = null;
					if(txtNumero.getText().length() > 0){
						numeroR = txtNumero.getText().toUpperCase();
					}
					if(txtTitre.getText().length() > 0){
						titreR = txtTitre.getText().toUpperCase();
					}
					if(txtPrix.getText().length() > 0){
						prixR = txtPrix.getText().toUpperCase();
					}
					if(txtGenre.getText().length() > 0){
						genreR = txtGenre.getText().toUpperCase();
					}
					if(txtAnnee.getText().length() > 0){
						anneeR = txtAnnee.getText().toUpperCase();
					}
					if(txtMaison.getText().length() > 0){
						maisonR = txtMaison.getText().toUpperCase();
					}
					if(txtArtiste.getText().length() > 0){
						artisteR = txtArtiste.getText().toUpperCase();
					}
					if((numeroR == null || numero.contains(numeroR)) &&
							(titreR == null || titre.contains(titreR)) &&
							(prixR == null || prix.contains(prixR)) &&
							(genreR == null || genre.contains(genreR)) &&
							(anneeR == null || annee.contains(anneeR)) &&
							(maisonR == null || maison.contains(maisonR)) &&
							(artisteR == null || artiste.contains(artisteR))){
						return true;
					}
					return false;
				}
			};
			sorter.setRowFilter(filter);
			tableResultat.setRowSorter(sorter);
			tableResultat.setCursor(new Cursor(Cursor.HAND_CURSOR));
		}
		return tableResultat;
	}
	private JScrollPane getScrollResultat() {
		if (scrollResultat == null) {
			scrollResultat = new JScrollPane(getTableResultat());
			scrollResultat.setBounds(10, 137, 316, 155);
		}
		return scrollResultat;
	}
	private JTextField getTxtPrix() {
		if (txtPrix == null) {
			txtPrix = new JTextField();
			txtPrix.setFont(new Font("Andalus", Font.PLAIN, 18));
			txtPrix.setColumns(10);
			txtPrix.setBounds(305, 8, 120, 20);
			txtPrix.getDocument().addDocumentListener(this);
		}
		return txtPrix;
	}
	private JTextField getTxtAnnee() {
		if (txtAnnee == null) {
			txtAnnee = new JTextField();
			txtAnnee.setFont(new Font("Andalus", Font.PLAIN, 18));
			txtAnnee.setColumns(10);
			txtAnnee.setBounds(305, 31, 120, 20);
			txtAnnee.getDocument().addDocumentListener(this);
		}
		return txtAnnee;
	}
	private JLabel getLblPrix() {
		if (lblPrix == null) {
			lblPrix = new JLabel("Prix :");
			lblPrix.setFont(new Font("Andalus", Font.PLAIN, 18));
			lblPrix.setBounds(256, 5, 39, 26);
		}
		return lblPrix;
	}
	private JLabel getLblAnnee() {
		if (lblAnnee == null) {
			lblAnnee = new JLabel("Ann\u00E9e :");
			lblAnnee.setFont(new Font("Andalus", Font.PLAIN, 18));
			lblAnnee.setBounds(241, 28, 58, 26);
		}
		return lblAnnee;
	}
	private JLabel getLblGenre() {
		if (lblGenre == null) {
			lblGenre = new JLabel("Genre :");
			lblGenre.setFont(new Font("Andalus", Font.PLAIN, 18));
			lblGenre.setBounds(19, 50, 61, 26);
		}
		return lblGenre;
	}
	private JTextField getTxtGenre() {
		if (txtGenre == null) {
			txtGenre = new JTextField();
			txtGenre.setFont(new Font("Andalus", Font.PLAIN, 18));
			txtGenre.setColumns(10);
			txtGenre.setBounds(75, 54, 152, 20);
			txtGenre.getDocument().addDocumentListener(this);
		}
		return txtGenre;
	}
	private JTextField getTxtMaison() {
		if (txtMaison == null) {
			txtMaison = new JTextField();
			txtMaison.setFont(new Font("Andalus", Font.PLAIN, 18));
			txtMaison.setColumns(10);
			txtMaison.setBounds(75, 77, 152, 20);
			txtMaison.getDocument().addDocumentListener(this);
		}
		return txtMaison;
	}
	private JLabel getLblMaison() {
		if (lblMaison == null) {
			lblMaison = new JLabel("Maison :");
			lblMaison.setFont(new Font("Andalus", Font.PLAIN, 18));
			lblMaison.setBounds(7, 74, 68, 26);
		}
		return lblMaison;
	}
	private JLabel getLblArtiste() {
		if (lblArtiste == null) {
			lblArtiste = new JLabel("Artiste :");
			lblArtiste.setFont(new Font("Andalus", Font.PLAIN, 18));
			lblArtiste.setBounds(237, 51, 62, 26);
		}
		return lblArtiste;
	}
	private JTextField getTxtArtiste() {
		if (txtArtiste == null) {
			txtArtiste = new JTextField();
			txtArtiste.setFont(new Font("Andalus", Font.PLAIN, 18));
			txtArtiste.setColumns(10);
			txtArtiste.setBounds(305, 54, 120, 20);
			txtArtiste.getDocument().addDocumentListener(this);
		}
		return txtArtiste;
	}
	private void update(){
		sorter.sort();
	}
	@Override
	public void changedUpdate(DocumentEvent e) {
		update();
	}
	@Override
	public void insertUpdate(DocumentEvent e) {
		update();
	}
	@Override
	public void removeUpdate(DocumentEvent e) {
		update();
	}
}
